package cn.s1995.sloth.bizs.service;

import cn.s1995.sloth.bizs.entity.Prod;
import cn.s1995.sloth.bizs.oo.req.ProdREQ;
import cn.s1995.sloth.bizs.oo.req.ProdSearchREQ;
import cn.s1995.sloth.bizs.oo.vo.ProdDetailVO;
import cn.s1995.sloth.bizs.oo.vo.ProdListVO;
import cn.s1995.sloth.common.core.util.R;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseService;

import java.util.List;

public interface ProdService extends MPJBaseService<Prod> {

    /**
     * 获取产品
     *
     * @param id
     * @return
     */
    Prod getProduct(Long id);

    /**
     * 保存产品
     * @param req
     */
    void saveProd(ProdREQ req);

    /**
     * 更新产品
     * @param req
     */
    void updateProd(ProdREQ req);

    /**
     * 删除产品
     * @param prodId
     */
    void removeProd(Long prodId);

    /**
     * 根据产品id删除缓存
     * @param prodId
     */
    void removeProductCacheByProdId(Long prodId);

    /**
     * 回显用户的收藏状态
     * @param uid
     * @param records
     * @return
     */
	List<ProdListVO> setCollectStatus(Long uid, List<Prod> records);

	/**
	 * 收藏产品
	 * @param id
	 * @return
	 */
	R collect(Long id);

    /**
     * 根据搜索条件查询产品分页数据
     * 解决 join + order by 查询慢的问题
     * @param page
     * @param req
     * @return
     */
	Page selectProdPage(Page page, ProdSearchREQ req);

    Prod getDeletedProd(Long id);

    ProdDetailVO convertToDetailVO(Prod prod, Long uidByToken);

    Page<ProdListVO> getPage(Page page, ProdSearchREQ req, Long uid);

    List<ProdListVO> getList(ProdSearchREQ req, Long uid);

}
